// Copyright (C) 2025 woodycpp
//
// This work is licensed under the Creative Commons Attribution-ShareAlike 4.0
// International License. To view a copy of this license, visit
// https://creativecommons.org/licenses/by-sa/4.0/
//
// You are free to:
//   * Share — copy and redistribute the material in any medium or format
//   * Adapt — remix, transform, and build upon the material
//
// Under the following terms:
//   * Attribution — You must give appropriate credit, provide a link to the
//   license,
//     and indicate if changes were made. You may do so in any reasonable
//     manner, but not in any way that suggests the licensor endorses you or
//     your use.
//   * ShareAlike — If you remix, transform, or build upon the material, you
//   must
//     distribute your contributions under the same license as the original.
//
// In short: You must credit the original author (woodycpp, 2025) and share any
// derivative works under the same CC-BY-SA-4.0 license.

#include <algorithm>

#define CPP

void reverse(int R[], int from, int to) {
#ifndef CPP
    for (int tmp; from < to; ++from, --to) {
        tmp = R[from];
        R[from] = R[to];
        R[to] = tmp;
    }
#else
    while (from < to) {
        std::swap(R[from++], R[to--]);
    }
#endif
}

void leftRotate(int R[], int n, int p) {
    reverse(R, 0, p - 1);  // 转置前 p 个元素
    reverse(R, p, n - 1);  // 转置后 n - p 个元素
    reverse(R, 0, n - 1);  // 转置所有元素
}